/***********************************************************************
 * Module:  ListePolices.java
 * Author:  Fabien Muguet
 * Purpose: Defines the Class ListePolices
 ***********************************************************************/

package vue.composants;

import java.util.*;
import modele.*;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionListener;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import vue.EcranTexte;

public class ListePolices extends JComboBox{

   private EcranTexte ecran;
   private Ressources ressources;
   private Vector<Font> polices;
   private Font policeCourante;

   private int w = 100;
   private int h = 20;


   public ListePolices(EcranTexte ecran, Ressources ressources) {
      this.ecran = ecran;
      this.ressources = ressources;
      polices = ressources.getPolices();
      initializeCombo();
   }

   private void initializeCombo() {
       
       DefaultComboBoxModel model = new DefaultComboBoxModel(polices.toArray());
       setModel(model);

       policeCourante = polices.get(0);

       setRenderer(new ListCellRenderer() {
			public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {

                                // On récupère la valeur de l'item
				Font font = (Font)value;

                                // La modifie la taille de la font
                                // Par défaut les font chargées par fichiers ont une taille de 1
                                // Le "f" est très important : si c'est un int la taille ne changera pas
                                font = font.deriveFont(14f);

                                // On créé un label avec la font et en texte le nom de la font
				JLabel label = new JLabel( font.getFontName() );
                                label.setFont(font);
                                label.setPreferredSize( new Dimension(w, h) );
				return label;
			}
		});


       addActionListener(new ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {
				JComboBox source = (JComboBox)e.getSource();
				policeCourante = (Font)source.getSelectedItem();
                                ecran.setFontChoisie(policeCourante);
			};
		});
   }
   
   public Font getFontCourant() {
       return policeCourante;
   }

}